package br.com.sistemasaude.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import br.com.sistemasaude.bean.Agendamento;
import br.com.sistemasaude.bean.Material;
import br.com.sistemasaude.bean.Usuario;
import br.com.sistemasaude.util.JpaUtil;

public class AgendamentoDAOImpl implements AgendamentoDAO{
	
	
	private final GenericDAO<Agendamento> dao;	
		
		EntityManager em = new JpaUtil().getEntityManager();
		
		public AgendamentoDAOImpl() {
			dao = new GenericDAO<Agendamento>(em, Agendamento.class);
			}
		
		public void salvar(Agendamento agendamento) {
			
			try {

				em.getTransaction().begin();
				dao.salvar(agendamento);
				em.getTransaction().commit();

			} catch (Exception e) {
				
				em.getTransaction().rollback();
				e.printStackTrace();
				
			} finally {
				em.close();
			}
			
		}
		
		public List<Agendamento> listaAgendamentos(Date dataAgendamento){
			
			List<Agendamento> agendamentos = new ArrayList<Agendamento>();

			try {

				em.getTransaction().begin();
				Query q =  em.createQuery("select a from Agendamento a where date(dtAtendimento) like:pData and dtCancelamento is null");
				q.setParameter("pData", dataAgendamento);
				agendamentos = q.getResultList();
				
				em.getTransaction().commit();
				

			} catch (Exception e) {

				e.printStackTrace();
				if (em.getTransaction().isActive()) em.getTransaction().rollback();

			} finally {

				em.close();
			}
			
			return agendamentos;

			
		}
		
		public Agendamento buscar(int id_agendamento){
			
			Query query = em.createQuery("from Agendamento a where a.idAgendamento = :id_agendamento");
			query.setParameter("id_agendamento", id_agendamento);
			
			return (Agendamento) query.getSingleResult();
		}	
		

}
